class Solution {
public:
    int minKBitFlips(vector<int>& nums, int k) {
        int sum=0;
        int num=0;//当前位置的反转次数,可以看做[i,i+k]位置内加变化次数
        int ans=0;
        int n=nums.size();
        vector<int>arr(n+k,0); //// 记录每个位置的反转次数
        for(int i=0;i<n;i++)
        {
            sum+=arr[i]; //统计该位置翻转了几次,sum为一直以来的总数,arr[k]如果没有被翻转则为-1,所以此时sum的奇偶改变,通过奇偶和对应位置的元素值来确定该位置是否需要翻转
            if((nums[i] ^ (sum & 1))==0)            
             // 当前位置是0且在该位置翻转了偶数次(等于没翻转),则需要反转
            {
                if(i+k>n) // 越界检查
                    return -1;
                ans++;  // 统计翻转次数
                sum++; // 增加反转次数
                arr[i+k]--; // 在终止位置后一位减1
                //因为每次都sum=sum+arr[i],在0位置翻转,那么在arr[k]变为-1
                //到arr[k],sum=1,则sum=sum+(-1) 即sum=0,表示该位置没翻转过
            }
        }
        return ans;
    }
};